package algo3.g203.modelo.armas;

import algo3.g203.modelo.fisica.Posicion;

public abstract class MinaSubmarina extends Arma{

	protected int relojMina;
	
	public MinaSubmarina(Posicion p) {
		super(p);
		this.relojMina = 1;
	}
	
	public boolean estaEn(Posicion p) {
		return this.posicion.equals(p);
	}
	
	public void avanzarRelojMina() {
		this.relojMina++;
	}
	
	// EL "A PARTIR" ES POR CULPA DEL TITIRITERO! - SINO SERIA "explotaEnEsteTurno"
	/**
	 * @return true si la mina debe estallar a partir de este turno
	 */
	protected boolean explotaAPartirDeEsteTurno() {
		return (this.relojMina >= this.getRetardoParaExplosion());
	}
		
	@Override
	public boolean comenzarTurno() {
		if (this.explotaAPartirDeEsteTurno())
		{
			for (ObservadorDeArma o : this.listaObservadores)
				o.notificarArmaDebeEstallar(this);
			return true;
		}
		this.avanzarRelojMina();
		return false;
	}
	
	/**
	 * TEMPLATE METHOD : Devolver la cantidad de turnos que le toma a mina estallar
	 */
	public abstract int getRetardoParaExplosion();
	
}